﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using DevExpress.XtraEditors;

namespace Share
{
    public partial class BaseForm : DevExpress.XtraEditors.XtraForm, IBaseForm
    {
        public BaseForm()
        {
            InitializeComponent();
        }

        #region Variable

        public event StatusBarEventHandler StatusBarTextChanged;

        ErrorProvider errValid;

        private string _strFunctionKey;
        public virtual string FunctionKey
        {
            get { return _strFunctionKey; }
            set { _strFunctionKey = value; }
        }

        private string _strFunctionName;
        public virtual string FunctionName
        {
            get { return _strFunctionName; }
            set { _strFunctionName = value; }
        }

        private bool _AutoID = false;
        /// <summary>
        /// Thuoc tinh cho biet chuc nang nay co cho phep so tu dong hay khong.
        /// </summary>
        public bool AutoID
        {
            get { return _AutoID; }
            set { _AutoID = value; }
        }

        private int _MaxLengthID = 20;
        /// <summary>
        /// Maximum number of ID's character
        /// </summary>
        public int MaxLengthID
        {
            get { return _MaxLengthID; }
            set { _MaxLengthID = value; }
        }

        private bool _IsAutoRefresh = false;
        /// <summary>
        /// Thuoc tinh cho biet du lieu refresh tu dong hay do nguoi dung tac dong.
        /// </summary>
        public bool IsAutoRefresh
        {
            get { return _IsAutoRefresh; }
            set { _IsAutoRefresh = value; }
        }

        private FormStatus _status;
        public FormStatus StatusOfForm
        {
            get { return _status; }
            set { _status = value; }
        }

        private string _strStatusText;
        public string StatusText
        {
            set
            {
                try
                {
                    _strStatusText = value;
                    if (StatusBarTextChanged != null) //if form loading finish
                    {
                        StatusBarEventArgs args = new StatusBarEventArgs(_strStatusText);
                        StatusBarTextChanged(this, args);
                    }
                }
                catch (Exception)
                {
                }
            }
        }

        private ErpPermission _permission;
        public ErpPermission Permission
        {
            get
            {
                return _permission;
            }
            set
            {
                _permission = value;
            }
        }

        #endregion

        #region Toolbar

            protected TOOLBAR tbCategory = new TOOLBAR();
            protected TOOLBAR tbAction = new TOOLBAR();

        #endregion

        #region Support Methods

        public void SetToolbarButton(TabpageName tpName)
        {
            Form frm = Application.OpenForms["FrmMain"];
            Control[] ctr = frm.Controls.Find("pnToolbar",true);
            if (ctr.Length > 0)
            {
                PanelControl pn = (PanelControl)ctr[0];
                switch (tpName)
                {
                    case TabpageName.Category:
                        {
                            SetToolbarButtonForAction(tbCategory, pn);
                        }
                        break;
                    case TabpageName.Action:
                        {
                            SetToolbarButtonForAction(tbAction, pn);
                        }
                        break;
                }
            }
        }

        private void SetToolbarButtonForAction(TOOLBAR tb, PanelControl pn)
        {
            foreach (Control item in pn.Controls)
            {
                if (item.Name == TOOLBARNAME.btnAdd.ToString())
                {
                    item.Enabled = tb.AllowAdd;
                }
                else if (item.Name == TOOLBARNAME.btnDelete.ToString())
                {
                    item.Enabled = tb.AllowDelete;
                }
                else if (item.Name == TOOLBARNAME.btnEdit.ToString())
                {
                    item.Enabled = tb.AllowEdit;
                }
                else if (item.Name == TOOLBARNAME.btnPrint.ToString())
                {
                    item.Enabled = tb.AllowPrint;
                }
                else if (item.Name == TOOLBARNAME.btnRefresh.ToString())
                {
                    item.Enabled = tb.AllowRefresh;
                }
                else if (item.Name == TOOLBARNAME.btnSave.ToString())
                {
                    item.Enabled = tb.AllowSave;
                }
            }
        }

        #endregion

        protected void ActionOnControl(Control[] listControl, bool enable)
        {
            foreach (Control item in listControl)
            {
                item.Enabled = enable;
            }
        }

        #region Override Base Methods

        public virtual void fncInsert()
        {
            //TODO: Các lệnh tổng quát được xử lý khi bấm nút Add
        }

        public virtual void fncSave()
        {
            if (_status == FormStatus.Edit)
                _status = FormStatus.View;
            else if (_status == FormStatus.Add)
                _status = FormStatus.View;
        }

        public virtual void fncEdit()
        {
            //TODO: Các lệnh tổng quát được xử lý khi bấm nút Edit
        }

        public virtual void fncDelete()
        {
            //TODO: Các lệnh tổng quát được xử lý khi bấm nút Delete
            if (_IsAutoRefresh)
            {
                fncRefresh();
            }
        }

        public virtual void fncRefresh()
        {
            //TODO: Các lệnh tổng quát được xử lý khi bấm nút Refresh
        }

        public virtual void fncPrint()
        {
            //TODO: Các lệnh tổng quát được xử lý khi bấm nút Print Preview
        }

        public virtual void fncLoad()
        {
            //TODO: Các lệnh tổng quát được xử lý khi form được Load lên
        }

        public virtual void fncFind()
        {
            //TODO: Các lệnh tổng quát được xử lý khi bấm nút Find
        }

        public virtual void fncFilter(bool bitEnable)
        {
            //TODO: Các lệnh tổng quát được xử lý khi bấm nút Filter
        }

        public virtual void fncFilter(bool bitEnable, string strGridName)
        {
            //TODO: Các lệnh tổng quát được xử lý khi bấm nút Filter
        }

        public virtual void fncSumary(bool bitEnable)
        {
            //TODO: Các lệnh tổng quát được xử lý khi bấm nút Sumary
        }

        public virtual void fncSumary(bool bitEnable, string strGridName)
        {
            //TODO: Các lệnh tổng quát được xử lý khi bấm nút Sumary
        }

        public void Erp_ExceptionHandler(Exception ex)
        {
            //TODO: Handle Exception
        }

        public string Erp_GetText(string strKey)
        {
            throw new Exception("The method or operation is not implemented.");
        }

        public string Erp_GetText(string strKey, string strCulture)
        {
            throw new Exception("The method or operation is not implemented.");
        }

        #endregion
    }
}
